Особенности отображения иерархических динамических списков в табличном поле

Отображение иерархических динамических списков в табличном поле имеет ряд особенностей.

Так табличное поле позволяет просматривать иерархические динамические списки по группам, при этом свойство "ТекущийРодитель" табличного поля указывает текущую группу, а свойство "ИзменятьТекущегоРодителя" позволяет запретить переход между группами в табличном поле. Смена текущего родителя происходит при помощи команд перехода по уровням, при отработке связи с другим табличным полем, отображающим дерево групп, а также при программном изменении свойства "ТекущийРодитель". Следует заметить, что поле "Родитель" отображаемого динамического списка исключается табличным полем из списка доступных полей для отбора. Это связано с тем, что переход по иерархии является частью функциональности табличного поля  и понятие "Родитель" для табличного поля является выделенным понятием и не обрабатывается в отборах как другие поля. Так как табличное поле при отображении динамических списков использует механизм динамической выборки, то при формировании выборки оно включает в нее дополнительное условие, указывающее родителя для получаемого блока данных. Тем самым, получаются только строки, имеющие указанного родителя.

Следует отметить, что не существует возможности установки отбора по родителю программно или интерактивно(посредством команды "Установить отбор и сортировку списка").

Может возникнуть ситуация, когда в табличном поле необходимо отобразить  строки, подчиненные определенному родителю, включая подчиненные строки. Так как используя свойство табличного поля "ТекущийРодитель" можно получить только строки, подчиненные указанному родителю, то не существует стандартной возможности  сделать такой отбор. Для решения данной проблемы рекомендуется использовать следующую методику.

Например, пусть существует форма списка справочника "Номенклатура" с двумя табличными полями. Пусть одно из табличных полей отображает указанный список справочника  как дерево, а другое как список.

Требуется в табличном поле, отображающем справочник как список отображать все строки, подчиненные текущей строке табличного поля, отображающего древовидный справочник. Для этого при обработке события "ПриАктивизацииСтроки" табличного поля, отображающего древовидный справочник необходимо установить отбор списку справочника, отображаемому как список. Например:

Копировать в буфер обмена
Процедура ДеревоПриАктивизацииСтроки(Элемент)
    Запрос = Новый Запрос; 
    Запрос.Текст = "ВЫБРАТЬ
    | Номенклатура.Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |
    |ГДЕ
    | Номенклатура.Ссылка В ИЕРАРХИИ(&Родитель) И
    | (Номенклатура.ЭтоГруппа = ЛОЖЬ)"; 

    Запрос.УстановитьПараметр("Родитель", ЭлементыФормы.Дерево.ТекущаяСтрока); 

    Результат = Запрос.Выполнить(); 
    Выборка = Результат.Выбрать(); 

    Список.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке; 
    Список.Отбор.Ссылка.Использование = истина; 
    Список.Отбор.Ссылка.Значение.Очистить();

    Пока Выборка.Следующий() Цикл 

        Список.Отбор.Ссылка.Значение.Добавить(Выборка.Ссылка); 

    КонецЦикла; 
КонецПроцедуры

Следует заметить, что табличное поле в открываемой форме будет отображать не иерархический список, а также что данный фрагмент программы не является производительным.

Более подробно ознакомиться с отличиями работы табличного поля при отображении динамических списков можно в разделе Особенности работы табличного поля с динамическими списками.